package com.wyix.service;

import com.wyix.entity.Course;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class CourseManager {
    // 使用 ConcurrentHashMap 存储课程（键=课程ID，值=课程对象）
    private final Map<String, Course> courseMap = new ConcurrentHashMap<>();

    // 初始化课程（模拟教务系统加载课程）
    public void initCourse(Course course) {
        courseMap.put(course.getCourseId(), course);
    }

    // 学生选课（核心并发操作：减少剩余名额）
    public boolean selectCourse(String courseId) {
        // 1. 检查课程是否存在
        Course course = courseMap.get(courseId);
        if (course == null) {
            System.out.println("❌ 课程不存在");
            return false;
        }

        // 2. 原子操作：剩余名额 > 0 时减少 1（关键线程安全点）
        // 使用 computeIfPresent 保证原子性（Java 8+ 支持）
        courseMap.computeIfPresent(courseId, (id, c) -> {
            if (c.getRemaining() > 0) {
                System.out.println(Thread.currentThread().getName() + "<抢到课程>，课程名额：" + course.getRemaining());
                c.setRemaining(c.getRemaining() - 1);
                return c;
            } else {
                System.out.println(Thread.currentThread().getName() + "<未抢到课程>，❌ 课程不存在");
                c.setRemaining(-1);
                return c;
            }
        });
        return course.getRemaining() >= 0;
    }

    // 查询课程剩余名额
    public Course getCourse(String courseId) {
        return courseMap.get(courseId);
    }
}